#ifndef _XX_YY_BMOCK_MOCKS_TYPE
#define _XX_YY_BMOCK_MOCKS_TYPE

#include "detail/bmock_expectation.hpp"
#include <boost/logic/tribool.hpp>

namespace bmock {
	typedef boost::shared_ptr<expectation> exp_ptr;

	struct mocks_type {		
		virtual void add_expectation(exp_ptr new_exp) = 0;
		virtual void expect_call_times_range(int min_, int max_) = 0;
		virtual void not_received() = 0;
		virtual void expect_call(const func_spec& f, const location& loc) = 0;
		virtual void expect_arguments(const arg_list& args) = 0;
		virtual exp_ptr get_latest() const = 0;
		virtual void set_result(const result_ptr& ptr) = 0;
		virtual std::pair<exp_ptr,boost::logic::tribool> check(const func_spec& f, const arg_list& args) = 0;
		virtual bool empty() const = 0;
		virtual bool is_done() const = 0;
		virtual void pop_last() = 0;		
	};
}

#endif